Get Active Directory User’s GUID and SID in C#? (Part 2)
Yesterday we learned how to Get the Current User’s Active Directory info. Today we will learn how to get a named user’s Active Directory info?
Get a named User’s Active Directory info?
The first steps are the same as yesterday.
Step 1 – Create a new Console Application project in Visual Studio.
Step 2 – Add a .NET reference to System.DirectoryServices.AccountManagement.
Step 3 – Populate the Main Method as shown below.
using System; using System.DirectoryServices.AccountManagement; namespace NamedUserAdInfo { class Program { static void Main(string[] args) { string userName = "Rhyous"; PrincipalContext context = new PrincipalContext(ContextType.Domain); UserPrincipal user = UserPrincipal.FindByIdentity(context, userName); Console.WriteLine("Name: " + user.Name); Console.WriteLine("User: " + user.UserPrincipalName); Console.WriteLine("GUID: " + user.Guid); Console.WriteLine(" SID: " + user.Sid); } } }
The only difference between the current user and a named user is that there is a static value for the current user called UserPrincipal.Current whereas for a named user, you need the user name.
Writing a program that does both
OK, so lets make a program that takes a parameter and does both. Here it is.
using System; using System.DirectoryServices.AccountManagement; namespace GetAdUserInfo { class Program { static UserPrincipal user = UserPrincipal.Current; static void Main(string[] args) { ParseArgs(args); OutputUserInformation(); } private static void OutputUserInformation() { Console.WriteLine("Name: " + user.Name); Console.WriteLine("User: " + user.UserPrincipalName); Console.WriteLine("GUID: " + user.Guid); Console.WriteLine(" SID: " + user.Sid); } private static void ParseArgs(string[] args) { foreach (var arg in args) { if (arg.StartsWith("user=", StringComparison.CurrentCultureIgnoreCase)) { string[] splitArgs = arg.Split("=".ToCharArray()); string userName = string.Empty; if (splitArgs.Length == 2) userName = splitArgs[1]; if (string.IsNullOrWhiteSpace(userName)) { Syntax(); } // set up domain context PrincipalContext ctx = new PrincipalContext(ContextType.Domain); // find a user user = UserPrincipal.FindByIdentity(ctx, userName); continue; } if (arg.StartsWith("user=", StringComparison.CurrentCultureIgnoreCase)) { Syntax(); } // if arg not found treat it like /? { Console.WriteLine("Argument not found: " + arg); Syntax(); } } } private static void Syntax() { String fullExeNameAndPath = System.Reflection.Assembly.GetExecutingAssembly().Location; String ExeName = System.IO.Path.GetFileName(fullExeNameAndPath); Console.WriteLine(ExeName + " user=[username]"); } } }
Here are the sample projects.
GetAdUserInfo.zip